import type { ElementType, LegacyRef } from 'react';
import { ColorEnum, SizeEnum, WidthEnum } from '../common';

export type Marked = { color: ColorEnum; position: 'left' | 'right' };

export interface TableOptions {
  /**
   * 单元格
   */
  celled?: boolean;
  /**
   * 宽松
   */
  padded?: boolean | 'very';
  /**
   * 紧凑
   */
  compact?: boolean | 'very';
  /**
   * 明确第一列
   */
  definition?: boolean;
  /**
   * 结构化
   */
  structured?: boolean;
  /**
   * fixed 表格布局
   */
  fixed?: boolean;
  /**
   * 单行
   */
  singleLine?: boolean;
  /**
   * 不堆叠
   */
  unstackable?: boolean;
  /**
   * 堆叠
   */
  stackable?: boolean | 'tablet';
  /**
   * 可选样式
   */
  selectable?: boolean;
  /**
   * 条纹
   */
  striped?: boolean;
  /**
   * 文本对齐方式
   */
  textAlign?: 'left' | 'center' | 'right';
  /**
   * 垂直对齐方式
   */
  verticalAlign?: 'top' | 'middle' | 'bottom';
  /**
   * 基本样式
   */
  basic?: boolean | 'very';
  /**
   * collapsing
   */
  collapsing?: boolean;
  /**
   * 列数
   */
  columns?: WidthEnum;
  /**
   * 颜色
   */
  color?: ColorEnum;
  /**
   * 深色背景
   */
  inverted?: boolean;
  /**
   * 排序
   */
  sortable?: boolean;
  /**
   * 尺寸大小
   */
  size?: SizeEnum;
  /**
   * 卡住
   */
  stuck?: Array<'head' | 'foot' | 'first' | 'last'>;
  /**
   * 滚动
   */
  scrolling?: boolean | 'long' | 'very long' | 'short' | 'very short';
  /**
   * 转发 ref
   */
  forwardedRef?: LegacyRef<HTMLElement>;
}

export interface TableHeaderOptions {
  /**
   * 标签或组件名称
   * @default td
   */
  as?: ElementType;
  /**
   * 全宽
   */
  fullWidth?: boolean;
  /**
   * 转发 ref
   */
  forwardedRef?: LegacyRef<HTMLElement>;
}

export interface TableHeaderCellOptions {
  /**
   * 排序
   */
  sorted?: 'ascending' | 'descending';
  /**
   * 转发 ref
   */
  forwardedRef?: LegacyRef<HTMLElement>;
}

export interface TableCellOptions {
  /**
   * 标签或组件名称
   * @default td
   */
  as?: ElementType;
  /**
   * 颜色
   */
  color?: 'positive' | 'negative' | 'warning' | 'error' | ColorEnum;
  /**
   * 激活
   */
  active?: boolean;
  /**
   * 禁用
   */
  disabled?: boolean;
  /**
   * 单行
   */
  singleLine?: boolean;
  /**
   * 标记
   */
  marked?: Marked;
  /**
   * 颜色；当 marked 存在时使用
   */
  colored?: 'positive' | 'negative' | 'warning' | 'error' | ColorEnum;
  /**
   * 可选样式
   */
  selectable?: boolean;
  /**
   * 文本对齐方式
   */
  textAlign?: 'left' | 'center' | 'right';
  /**
   * 垂直对齐方式
   */
  verticalAlign?: 'top' | 'middle' | 'bottom';
  /**
   * collapsing
   */
  collapsing?: boolean;
  /**
   * 宽度
   */
  wide?: WidthEnum;
  /**
   * 转发 ref
   */
  forwardedRef?: LegacyRef<HTMLElement>;
}

export interface TableBodyOptions {
  /**
   * 转发 ref
   */
  forwardedRef?: LegacyRef<HTMLElement>;
}

export interface TableFooterOptions {
  /**
   * 转发 ref
   */
  forwardedRef?: LegacyRef<HTMLElement>;
}

export interface TableRowOptions {
  /**
   * 颜色
   */
  color?: 'positive' | 'negative' | 'warning' | 'error' | ColorEnum;
  /**
   * 激活
   */
  active?: boolean;
  /**
   * 禁用
   */
  disabled?: boolean;
  /**
   * 标记
   */
  marked?: Marked;
  /**
   * 颜色；当 marked 存在时使用
   */
  colored?: 'positive' | 'negative' | 'warning' | 'error' | ColorEnum;
  /**
   * 文本对齐方式
   */
  textAlign?: 'left' | 'center' | 'right';
  /**
   * 垂直对齐方式
   */
  verticalAlign?: 'top' | 'middle' | 'bottom';
  /**
   * 转发 ref
   */
  forwardedRef?: LegacyRef<HTMLElement>;
}
